package com.maimang.platform.crm.config.datasource;

import com.maimang.platform.crm.enums.DataSourceType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 数据源切换处理
 *
 * @author Rocky
 */
public class DynamicDataSourceContextHolder {
	public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);

	/**
	 * 使用ThreadLocal维护变量，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
	 * 所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
	 */
	private static final ThreadLocal<DataSourceType> CONTEXT_HOLDER = new ThreadLocal<>();

	/**
	 * 获得数据源的变量
	 */
	public static DataSourceType getDataSourceType() {
		DataSourceType dataSourceType = CONTEXT_HOLDER.get() == null ? DataSourceType.MASTER : CONTEXT_HOLDER.get();
		log.info("获取到{}数据源", dataSourceType.getValue());
		return dataSourceType;
	}

	/**
	 * 设置数据源的类型
	 */
	public static void setDateSoureType(DataSourceType dsType) {
		log.info("切换到{}数据源", dsType.getValue());
		CONTEXT_HOLDER.set(dsType);
	}

	/**
	 * 清空数据源变量
	 */
	public static void clearDateSoureType() {
		CONTEXT_HOLDER.remove();
	}

	/**
	 * 恢复初始数据源变量
	 */
	public static void resetDateSoureType() {
		CONTEXT_HOLDER.set(DataSourceType.MASTER);
	}

}
